const fs = require('fs')
const path = require('path')

/**
 * 1. 异步写入
 * 该方法会覆盖原有文件内容，没有文件则创建 + 写入
 * */
function writeFileAsync (filePath, cont) {
    fs.writeFile(filePath, cont, (err) => {
        if (err) {
            console.log("写入失败");
            return;
        }
        console.log("写入成功");
    });
}

// writeFileAsync(path.join(__dirname, './静夜思.txt'), '窗前明月光，\n')

/**
 * 2. 同步写入
 * */
function writeFile (filePath, cont) {
    try {
        fs.writeFileSync(filePath, cont);
        console.log("写入成功");
    } catch (e) {
        console.log("写入失败")
    }
}

// writeFile(path.join(__dirname, './静夜思.txt'), '静夜思\n窗前明月光，\n')

/**
 * 3. 异步追加
 * */
function appendFile (filePath, cont) {
    fs.appendFile(filePath, cont, (err) => {
        if (err) {
            console.log("追加失败");
            return;
        }
        console.log("追加成功");
    });
}

// appendFile(path.join(__dirname, './静夜思.txt'), '疑是地上霜，\n')

/**
 * 4. 同步追加
 * */
function appendFileSync (filePath, cont) {
    try {
        fs.appendFileSync(filePath, cont);
        console.log("追加成功")
    } catch (e) {
        console.log("追加失败")
    }
}

// appendFileSync(path.join(__dirname, './静夜思.txt'), '举头望明月，\n')

/**
 * 5. fs.writeFile追加写入
 * 通过设置flag: 'a'选项，fs.writeFile也可以用于追加写入
 * */
function writeFile (filePath, cont) {
    fs.writeFile(filePath, cont, { flag: 'a' }, (err) => {
        if (err) {
            console.error("追加写入失败:", err);
            return;
        }
        console.log("追加写入成功");
    });
}
// writeFile(path.join(__dirname, './静夜思.txt'), '低头思故乡，\n')

/**
 * 6. 流式写入
 * 对于大文件或需要持续写入的数据，使用流（stream）是一个更好的选择
 * */
function writeFileStream (filePath) {
    const ws = fs.createWriteStream(filePath);

    ws.write('国破山河在，\r\n');
    ws.write("城春草木深。\r\n");
    ws.write("感时花溅泪，\r\n");
    ws.write("恨别鸟惊心。\r\n");

    // 可以使用ws.end()，它会在数据写入完成后自动关闭流，确保数据完全写入文件
    ws.end(() => {
        console.log("流式写入完成");
    });

    // 通常不需要显式调用ws.close()来关闭写入流，因为close方法不会等待数据被刷新到磁盘，可能会导致数据未完全写入文件
    //ws.close()
}
writeFileStream(path.join(__dirname, './春望.txt'))